SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

/*
	CALCULAR LA ANTIGUEDAD DE UN AGENTE (DESDE / HASTA) EN DIAS HABILES Y NO HABILES.
*/

CREATE PROCEDURE [dbo].[spAntiguedadAgenteHab]
@Agente int,
@Desde datetime,
@Hasta datetime,
@Res int output
 AS
SET NOCOUNT ON
declare @dw1 int
declare @dw2 int
declare @dh int

declare @PA datetime
declare @PB datetime
declare @FA datetime
declare @FB datetime
declare @Baja varchar(1)
declare @Licencia int
declare @Resultado int
declare @DiasHabiles int

declare Subservicios cursor for 
--Select ss.FechaAlta, ss.FechaBaja, ss.Baja, Licencia from tb_SubserviciosAgentes ss, tb_ServiciosAgentes s
Select CASE WHEN ss.FechaAlta < @Desde THEN @Desde ELSE SS.FechaAlta END AS FechaAlta, 
CASE WHEN ss.FechaBaja > @Hasta THEN @Hasta ELSE ss.FechaBaja END FechaBaja, ss.Baja, Licencia from tb_SubserviciosAgentes ss, tb_ServiciosAgentes s
where s.agente = @Agente 
--and  (ss.Baja = 'N' or ss.FechaBaja>=@Desde) 
AND ( (SS.FechaBaja IS NULL) OR (SS.FechaBaja IS NOT NULL AND SS.FechaBaja >= @Desde) )
and ss.FechaAlta<=@Hasta 
and s.idServicioAgente = ss.ServicioAgente
Order by ss.FechaAlta
FOR READ ONLY

Select @PA = @Desde, @PB=@Desde, @Resultado=0, @diashabiles=0

OPEN SubServicios

fetch next from SubServicios into @FA, @FB, @Baja,@Licencia

while @@fetch_status = 0
begin
	if (Select CuentaAntGral from tb_Licencias where idLicencia = @Licencia) is null
		begin
		if @baja = 'N' or @FB > @Hasta
			Select @FB = @Hasta
		if @FA>@PB
			begin
			select @dw1=DatePart(dw,@PA),@dw2=DatePart(dw,@PB),@dh=datediff(day,@PA,@PB)+1-(datediff(wk,@PA,@PB)*2)
			if @dw1=1 
				select @dh=@dh-1
			if @dw2=7
				select @dh=@dh-1
			Select @diashabiles = @diashabiles + @dh
			Select @PA=@FA,@PB=@FB
			end
		else
			begin
			if @FB>@PB
				Select @PB = @FB
			end
		end
	
	fetch next from SubServicios into @FA, @FB, @Baja,@Licencia
end

close SubServicios
deallocate SubServicios

select @dw1=DatePart(dw,@PA),@dw2=DatePart(dw,@PB),@dh=datediff(day,@PA,@PB)+1-(datediff(wk,@PA,@PB)*2)
if @dw1=1 
	select @dh=@dh-1
if @dw2=7
	select @dh=@dh-1
Select @diashabiles = @diashabiles + @dh

--print cast(@diashabiles as varchar(4)) 
select @Res = @diashabiles
return(@diashabiles)
GO
